/**
 * 工具
 * 
 */
import { Toast } from 'mint-ui';

/**
 * 星期数转中文
 */
const switchDay = function (data) {
  let result = String
  switch (data) {
    case 0:
      result = '日'
      break
    case 1:
      result = '一'
      break
    case 2:
      result = '二'
      break
    case 3:
      result = '三'
      break
    case 4:
      result = '四'
      break
    case 5:
      result = '五'
      break
    case 6:
      result = '六'
      break
  }
  return result
}
/**
 * 正则校验集合
 */
const regulars = {
  'phone': /^1[34578]\d{9}$/, // 手机号校验
  'phoneError': '请输入11位手机号',
  'password': /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$/, // 密码
  'passwordError': '请输入6~16位字符的密码（数字和字母组成）',
  'IDcard': /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/, // 身份证
  'IDcardError': '请输入18位身份证号码',
  'email': /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/, // 邮箱
  'emailError': '请输入正确的邮箱地址',
  'securityCode': /^\d{6}$/, // 验证码
  'securityCodeError': '请输入6位数验证码',
  'QQ': /^\d{5,13}$/, // QQ
  'QQError': '请输入正确的QQ号',
  'weixin': /^[a-zA-Z]{1}[-_a-zA-Z0-9]{5,19}$/, // 微信
  'weixinError': '请输入正确的微信号',
  'plusInt': /^[1-9]*[1-9][0-9]*$/, // 正整数
  'plusIntError': '请输入正整数'
}
export default {
  /**
   * 获取今天日期
   * interval -- 年月日区间的间隔，默认以-隔开
   */
  getTime (interval) {
    return this.formatTime(new Date(), interval)
  },
  /**
   * 获取此刻时间戳
   */
  getTimestamp () {
    return new Date().getTime()
  },
  /**
   * 获取该日期是星期几
   */
  getDay (time) {
    time = this.simplifyTime(time, true)
    console.log(switchDay(new Date(time.year, (Number(time.month) - 1), time.date).getDay()))
  },
  /**
   * 获取两个时间戳间隔多少天
   */
  timeStampDuration (stampOne, stampTwo) {
    let difference = 0
    if (stampOne > stampTwo) {
      difference = stampOne - stampTwo
    } else {
      difference = stampTwo - stampOne
    }
    return Math.floor(difference / (24 * 3600 * 1000))
  },
  /*
   * 格式化时间
   * data -- 传入的时间戳
   * interval -- 年月日区间的间隔，默认以-隔开
   */
  formatTime (data, interval) {
    let time = new Date(data)
    let year = time.getFullYear()
    let month = time.getMonth()
    let date = time.getDate()
    month = month + 1
    month = this.addZero(month)
    date = this.addZero(date)
    if (!interval) {
      interval = '-'
    }
    return year + interval + month + interval + date
  },
  /**
   * 简化时间格式，返回yyyymmdd，参数split如果有值，返回拆分的年月日
   */
  simplifyTime (data, split) {
    data = data.toString().replace(/[^\d]/ig, '')
    let year = data.substring(0, 4)
    let month = data.substring(4, 6)
    let date = data.substring(6, 8)
    if (split) {
      return {
        'year': year,
        'month': month,
        'date': date
      }
    }
    return year + month + date
  },
  /**
   * 数据前导补0
   * data -- 传输的数值
   * digit -- 返回的字符串长度，默认返回长度2
   */
  addZero (data, digit) {
    data = data.toString()
    if (!digit) {
      digit = 2
    }
    let disparity = digit - data.length
    if (disparity < 1) {
      return data.toString()
    }
    let addText = ''
    for (var i = 0; i < disparity; i++) {
      addText = addText + '0'
    }
    return addText + data
  },
  /**
   * 对象转二维数组
   */
  objConvertArr (data) {
    let arr = []
    for (let i in data) {
      arr.push([i, data[i]])
    }
    return arr
  },
  /**
   * 二维数组转对象
   */
  arrConvertObj (data) {
    let obj = {}
    data.forEach(function (item) {
      let key = item[0]
      let value = item[1]
      obj[key] = value
    })
    return obj
  },
  /**
   * 获取浮点型小数
   * digit -- 返回的小数点长度，默认返回小数点后带2位
   */
  getFloat (data, digit) {
    if (isNaN(Number(data))) {
      return false
    }
    if (!digit) {
      digit = 2
    }
    data = data.toString()
    let splitResult = data.split('.')
    if (splitResult.length === 1) {
      let addText = '.'
      for (let i = 0; i < digit; i++) {
        addText = addText + '0'
      }
      return data + addText
    } else {
      let text = splitResult[1]
      if (text.length < digit) {
        let addText = '.' + text
        for (let i = 0; i < (digit - text.length); i++) {
          addText = addText + '0'
        }
        return splitResult[0] + addText
      } else {
        return splitResult[0] + '.' + text.substring(0, digit)
      }
    }
  },
  /**
   * 数据去重（最高效执行）
   */
  arrayDistinct (array) {
    let obj = {}
    let result = []
    for (var i = 0; i < array.length; i++) {
      if (!obj[array[i]]) {
        obj[array[i]] = true
        result.push(array[i])
      }
    }
    return result
  },
  /**
   * 正则验证，type类型如下
   * 手机号 —— phone
   * 密码 —— password
   * 身份证 —— IDcard
   * 邮箱 —— email
   * 验证码 —— securityCode
   * QQ —— QQ
   * 微信 —— weixin
   * 正整数 —— plusInt
   */
  validateValue (val, type, errMsg) {
    if (!type) { // 没有传类型，直接返回
      return {
        'state': false,
        'msg': '第二个参数请填写检测类型'
      }
    }
    val = (val).toString().trim()
    let msg
    if (!regulars[type].test(val)) {
      msg = regulars[type + 'Error']
      if (errMsg) {
        msg = errMsg
      }
      Message(msg)
    }
    return {
      'state': msg === undefined,
      'msg': msg
    }
  },
  /**
   * 判断是否在微信客户端中打开网站
   */
  isWeiXinClient () {
    let ua = window.navigator.userAgent.toLowerCase()
    return ua.match(/micromessenger/) !== null
  },
  /**
   * 判断用户依赖的客户端
   */
  useingClient () {
    if (this.isWeiXinClient()) {
      return 'weixin'
    }
    let ua = navigator.userAgent
    if (/(iPhone|iPad|iPod|iOS)/i.test(ua)) {
      return 'ios'
    } else if (/(Android)/i.test(ua)) {
      return 'android'
    } else {
      return 'pc'
    }
  },
  /**
   * 判断文件流大小是否超出限制
   * file —— 文件流
   * max —— 文件size可使用范围最大值：如1M传1、2M传2，默认为2M（含2M）
   */
  checkFileSize (file, max) {
    if (!file) {
      return false
    }
    let fileSize = file.size
    // 默认2M
    if (!max) {
      max = 2
    }
    max = max * 1024 * 1024
    if (fileSize <= max) {
      return true
    } else {
      Message('文件大小超出限制')
      return false
    }
  },
  /**
   * 判断文件流类型是否超出限制
   * file —— 文件流
   * range —— 文件type可使用范围：['image/jpeg', 'image/jpg', 'image/png']，默认为检测后缀名为jpeg、jpg、png的图片，[]表接受全部类型
   */
  checkFileType (file, range) {
    if (!file) {
      return false
    }
    let fileType = file.type
    try {
      if (range.length === 0) {
        return true
      }
    } catch (err) {
      // 默认为检测后缀名为jpeg、jpg、png的图片
      if (!range) {
        range = ['image/jpeg', 'image/jpg', 'image/png']
      }
    }
    for (var i = 0; i < range.length; i++) {
      if (fileType === range[i]) {
        return true
      }
    }
    Message('文件类型不支持，请重新选择')
    return false
  },
  /**
   * 修改分享二次分享域名
   * 因二次分享微信会加上分享标识，通过此法还原域名
   */
  changeWxShareUrl () {
    if (this.isWeiXinClient()) {
      let href = document.location.href
      // 执行微信二次分享判断
      if (href.indexOf('?from') !== -1) {
        if (href.indexOf('?from=singlemessage&isappinstalled=0')) { // 处理分享给好友域名
          href = href.replace('?from=singlemessage&isappinstalled=0', '')
        } else if (href.indexOf('?from=timeline&isappinstalled=0')) { // 处理分享到朋友圈域名
          href = href.replace('?from=timeline&isappinstalled=0', '')
        } else if (href.indexOf('?from=groupmessage&isappinstalled=0')) { // 处理分享到微信群域名
          href = href.replace('?from=groupmessage&isappinstalled=0', '')
        }
        window.location.href = href
      }
    }
  }
}
